package cn.fastoo.web.backstage.service.system;

import cn.fastoo.common.dao.system.RoleDao;
import cn.fastoo.common.dao.system.UserBaseInfoDao;
import cn.fastoo.common.entity.system.Role;
import cn.fastoo.common.entity.system.UserBaseInfo;
import cn.fastoo.common.sampleframe.search.Search;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 系统管理业务类.
 * 
 * @author LP
 */
// Spring Service Bean的标识.
@Component
@Transactional
public class SystemService {
	public static final String HASH_ALGORITHM = "SHA-1";
	public static final int HASH_INTERATIONS = 1024;
	private static final int SALT_SIZE = 8;

	private static Logger logger = LoggerFactory.getLogger(SystemService.class);

	

	@Autowired
	private RoleDao roleDao;
	
	@Autowired
	private UserBaseInfoDao userBaseInfoDao;
	


//
//	/**
//	 * 在保存用户时,发送用户修改通知消息, 由消息接收者异步进行较为耗时的通知邮件发送.
//	 * 
//	 * 如果企图修改超级用户,取出当前操作员用户,打印其信息然后抛出异常.
//	 * 
//	 */
//	public void saveUser(UserBaseInfo rsync) {
//
//		if (isSupervisor(rsync)) {
//			logger.warn("操作员{}尝试修改超级管理员用户", SystemUtils.getCurrentUserName());
//		}
//
//		// 设定安全的密码，生成随机的salt并经过1024次 sha-1 hash
////		if (StringUtils.isNotBlank(rsync.getPlainPassword())) {
////			entryptPassword(rsync);
////		}
//
//		userDao.save(rsync);
//
//		// 发送JMS消息
//		//sendNotifyMessage(rsync);
//	}
//
//	/**
//	 * 设定安全的密码，生成随机的salt并经过1024次 sha-1 hash
//	 */
//	private void entryptPassword(User rsync) {
//		byte[] salt = Digests.generateSalt(SALT_SIZE);
////		rsync.setSalt(Encodes.encodeHex(salt));
//
////		byte[] hashPassword = Digests.sha1(rsync.getPlainPassword().getBytes(), salt, HASH_INTERATIONS);
////		rsync.setPassword(Encodes.encodeHex(hashPassword));
//	}
//
//	public List<User> searchUser(Map<String, Object> searchParams) {
//		Map<String, SearchFilter> filters = SearchFilter.parse(searchParams);
//		Specification<User> spec = DynamicSpecifications.bySearchFilter(filters.values(), User.class);
//		List<User> userList = userDao.findAll(spec);
//		return userList;
//	}
//
//	/**
//	 * 获取全部用户对象，并在返回前完成LazyLoad属性的初始化。
//	 */
//	public List<User> getAllUserInitialized() {
//		List<User> result = (List<User>) userDao.findAll();
//		for (User rsync : result) {
////			Hibernate.initialize(rsync.getRoleList());
//		}
//		return result;
//	}

//	/**
//	 * 判断是否超级管理员.
//	 */
//	private boolean isSupervisor(User rsync) {
//		return ((rsync.getId() != null) && (rsync.getId() == 1L));
//	}
//
//	public User getUser(Long id) {
//		return userDao.findOne(id);
//	}
//
//	/**
//	 * 按名称查询用户, 并对用户的延迟加载关联进行初始化.
//	 */
//	public User findUserByNameInitialized(String name) {
//		User rsync = userDao.findByName(name);
//		if (rsync != null) {
////			Hibernate.initialize(rsync.getRoleList());
//		}
//		return rsync;
//	}
//
//	/**
//	 * 获取当前用户数量.
//	 */
//	public Long getUserCount() {
//		return userDao.count();
//	}
//
//	public User findUserByLoginName(String loginName) {
//		return userDao.findByLoginName(loginName);
//	}
	
	public UserBaseInfo findUserBaseInfoByLoginName(String loginName) {
		try {
			return userBaseInfoDao.findOne(new Search().addSearchFilter("EQ_loginName",loginName));
		}catch (Exception e){
			e.printStackTrace();
		}
		 return null;
	}


	/**
	 * 发送用户变更消息.
	 * 
	 * 同时发送只有一个消费者的Queue消息与发布订阅模式有多个消费者的Topic消息.
	 */
//	private void sendNotifyMessage(User rsync) {
//		if (notifyProducer != null) {
//			try {
//				notifyProducer.sendQueue(rsync);
//				notifyProducer.sendTopic(rsync);
//			} catch (Exception e) {
//				logger.error("消息发送失败", e);
//			}
//		}
//	}


	// --------------------//
	// Role Management //
	// --------------------//

	public List<Role> getAllRole() {
		return roleDao.find(new Search());
	}
}
